<?php
/*
Aurus CMS - free OOP CMS
Copyright (C) 2010  Nestor Yanchuk

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
if (!defined('ROOT')) die();
class Module_users implements Module {
	public function run() {
		if (isset($_GET['do']) && $_GET['do'] == 'register') {
			$this->register();
		} elseif (isset($_GET['do']) && $_GET['do'] == 'login') {
			$this->logIn();
		} elseif (isset($_GET['do']) && $_GET['do'] == 'mypage') {
			$this->myPage();
		} elseif (isset($_GET['show']) && $_GET['show'] == 'user') {
			$this->showUser();
		}
		
	}
	public function onActivate() {

	}
	public function onDeactivate() {
		die('System module can not be disabled');
	}
	public function initAdminArea() {
		$_GET['mod'] = isset($_GET['mod']) ? $_GET['mod'] : '';
		switch ($_GET['mod']) {
			case 'groups':
				include (dirname(__file__) . '/admin/groups.php');
				break;
			case 'addgroup':
				include (dirname(__file__) . '/admin/addgroup.php');
				break;
			case 'adduser':
				include (dirname(__file__) . '/admin/adduser.php');
				break;
			case 'showall':
				include (dirname(__file__) . '/admin/showall.php');
				break;
			default:
				include (dirname(__file__) . '/admin/editusers.php');
				break;
		}

	}
	public function runAjax() {
		if (Users::getInstance()->check_exist($_POST['login'], '')) {
			print '<span style="color:red">' . __('Такий користувач вже існує') . '</span>';
		} elseif (!Users::getInstance()->isValidName($_POST['login'])) {
			print '<span style="color:red">' . __('Цей логін містить заборонені символи') . '</span>';
		} else {
			print '<span style="color:green">' . __('Ви можете реєструватись') . '</span>';
		}
	}
	private function showUser() {
		$tpl = Template::getInstance();
		if (isset($_GET['id']) && (int)$_GET['id']) {
			$tpl->load('showuser');
			$tpl->set('{avatar}', Users::getInstance()->getUserData('avatar', $_GET['id']) ? LINK_ROOT . Users::getInstance()->getUserData('avatar', $_GET['id']) : Users::getInstance()->noavatar);
			$tpl->set('{reg_date}', au_date(Config::get('timeFormat'), Users::getInstance()->getUserData('reg_date', $_GET['id'])));
			$tpl->set('{signature}', Users::getInstance()->getUserData('signature', $_GET['id']));
			$tpl->set('{about}', Users::getInstance()->getUserData('about', $_GET['id']));
			$tpl->set('{icq}', Users::getInstance()->getUserData('icq', $_GET['id']));
			$tpl->set('{city}', Users::getInstance()->getUserData('country', $_GET['id']));
			$tpl->set('{comments_count}', Users::getInstance()->getUserData('com_count', $_GET['id']));
			$tpl->set('{login}', Users::getInstance()->getUserData('login', $_GET['id']));
			Aurus::getInstance()->addContent($tpl->out());
			Aurus::getInstance()->setTitle(Users::getInstance()->getUserData('login', $_GET['id']));
		} elseif (isset($_GET['login'])) {
			$tpl->load('showuser');
			$tpl->set('{avatar}', Users::getInstance()->getUserData('avatar', false, $_GET['login']) ? LINK_ROOT . Users::getInstance()->getUserData('avatar', false, $_GET['login']) : Users::getInstance()->noavatar);
			$tpl->set('{reg_date}', au_date(Config::get('timeFormat'), Users::getInstance()->getUserData('reg_date', false, $_GET['login'])));
			$tpl->set('{signature}', Users::getInstance()->getUserData('signature', false, $_GET['login']));
			$tpl->set('{about}', Users::getInstance()->getUserData('about', false, $_GET['login']));
			$tpl->set('{icq}', Users::getInstance()->getUserData('icq', false, $_GET['login']));
			$tpl->set('{city}', Users::getInstance()->getUserData('country', false, $_GET['login']));
			$tpl->set('{comments_count}', Users::getInstance()->getUserData('com_count', false, $_GET['login']));
			$tpl->set('{login}', Users::getInstance()->getUserData('login', false, $_GET['login']));
			Aurus::getInstance()->addContent($tpl->out());
			Aurus::getInstance()->setTitle(Users::getInstance()->getUserData('login', false, $_GET['login']));
		}
	}
	private function myPage() {
		if (!Users::getInstance()->is_logged()) {
			Aurus::getInstance()->setError(__('Увійдіть щоб мати власну сторінку'));
			return;
		}

		Aurus::getInstance()->setTitle(__('Моя сторінка'));
		if (isset($_POST['control'])) {
			$update = array();
			$err = false;

			if (!empty($_FILES['avatar']['name'])) {
				$ava = Upload::uploadImage('avatar', ROOT . '/uploads/avatars/', 100, 100, '', Users::getInstance()->getLoggedUsersData('uid'));
				if (is_string($ava)) {
					$update['avatar'] = 'uploads/avatars/' . $ava;
				} else {
					switch ($ava){
						case -1:
							Aurus::getInstance()->setError(__('Сталась помилка при завантаженні аватару, нема відправки картинки'));
							break;
						case -2:
							Aurus::getInstance()->setError(__('Сталась помилка при завантаженні аватару, надісланий файл не є картинкою'));
							break;
						case -3:
							Aurus::getInstance()->setError(__('Сталась помилка при завантаженні аватару, висота або ширина картинки завеликі'));
							break;
						case -4:
							Aurus::getInstance()->setError(__('Сталась помилка при завантаженні аватару, невідомий тип картинки'));
							break;
						case -5:
							Aurus::getInstance()->setError(__('Сталась помилка при завантаженні аватару, невідома помилка'));
							break;
					}
					$err = true;
				}
			}
			if (!empty($_POST['password2']) && !empty($_POST['password1'])) {
				if (md5(md5($_POST['password1'])) == md5(md5($_POST['password2']))) {
					$update['password'] = md5(md5($_POST['password2']));
				} else {
					$err = true;
					Aurus::getInstance()->setError(__('Паролі не співпадають'));
				}
			}

			if (!isValidEmail($_POST['email'])) {
				$err = true;
				Aurus::getInstance()->setError(__('Формат Вашої електронної скриньки невірний'));
			}

			if (isset($_POST['delava']) && $_POST['delava'] == '1') {
				$update['avatar'] = '';
				unlink(ROOT . '/' . Users::getInstance()->getLoggedUsersData('avatar'));
			}

			if (!$err) {
				$update['email'] = Mysql::getInstance()->escape($_POST['email']);
				$update['icq'] = Mysql::getInstance()->escape($_POST['icq']);
				$update['country'] = Mysql::getInstance()->escape($_POST['city']);

				$update['about'] = Mysql::getInstance()->escape(Parser::getInstance()->parse($_POST['about']));
				$update['signature'] =Mysql::getInstance()->escape(Parser::getInstance()->parse($_POST['signature']));

				Mysql::getInstance()->update('users', $update, 'uid=' . Users::getInstance()->getLoggedUsersData('uid'));
				Aurus::getInstance()->setInfo(__('Інформацію оновлено'));
				Users::getInstance()->checkLogged();
			}
		}
		
		$tpl = Template::getInstance();
		$tpl->load('mypage');
		$tpl->set('{signature}', Parser::getInstance()->unParseBB(Users::getInstance()->getLoggedUsersData('signature')));
		$tpl->set('{about}', Parser::getInstance()->unParseBB(Users::getInstance()->getLoggedUsersData('about')));
		$tpl->set('{email}', Users::getInstance()->getLoggedUsersData('email'));
		$tpl->set('{icq}', Users::getInstance()->getLoggedUsersData('icq'));
		$tpl->set('{city}', Users::getInstance()->getLoggedUsersData('country'));
		$tpl->set('{editor}', Aurus::getInstance()->getEditor());
		$tpl->set('{avatar}', LINK_ROOT . Users::getInstance()->getLoggedUsersData('avatar'));
		Aurus::getInstance()->addContent(Aurus::getInstance()->form_start('post', null, true) . $tpl->out() . '</form>');

	}
	private function register() {
		if (isset($_POST['login'])) {
			if (!empty($_POST['login']) && !empty($_POST['pass']) && !empty($_POST['repass']) && !empty($_POST['mail'])) {
				if ($_POST['pass'] !== $_POST['repass']) {
					Aurus::getInstance()->setError(__('Паролі не співпадають')); //password 1 != password 2
					$err = true;
				}

				if (!Modules::getInstance()->checkCaptcha($_POST['captcha'], 'registration')) {
					Aurus::getInstance()->setError(__('Код захисту введено з помилкою')); //Security code don`t maches
					$err = true;
				}

				if (!$err) {
					$check = Users::getInstance()->registerUser($_POST['login'], $_POST['pass'], $_POST['mail'], $_POST['icq'], $_POST['city'], $_POST['signature'], $_POST['about_me']);
					if ($check > 0) {
						Aurus::getInstance()->setError(__('Ви успішно зареєструвались, тепер можете увійти під своїм іменем'));
					} else {
						Aurus::getInstance()->setError(__('Під час реєстрації сталась невідома помилка, зв\'яжітся з адміністратором сайту'));
					}
				}
			} else {
				if (empty($_POST['login'])) Aurus::getInstance()->setError(__('Ви не ввели логін'));
				if (empty($_POST['pass'])) Aurus::getInstance()->setError(__('Ви не ввели пароль'));
				if (empty($_POST['repass'])) Aurus::getInstance()->setError(__('Ви не повторили пароль'));
				if (empty($_POST['mail'])) Aurus::getInstance()->setError(__('Ви не ввели адресу Вашої електронної скриньки'));
				if (!Modules::getInstance()->checkCaptcha($_POST['captcha'], 'registration')) Aurus::getInstance()->setError(__('Код захисту введено з помилкою'));
			}
		} else {
			$tpl = Template::getInstance();
			$tpl->load('register');
			$tpl->set('{captcha}', Modules::getInstance()->getCaptcha('registration'));
			Aurus::getInstance()->addContent(Aurus::getInstance()->form_start() . $tpl->out() . '</form>');
		}
		Aurus::getInstance()->setTitle(__('Реєстрація'));
	}
	private function logIn() {
		if (isset($_POST['login']) && isset($_POST['pass'])) {
			if (!Users::getInstance()->logIn($_POST['login'], $_POST['pass'])) {
				Aurus::getInstance()->setError(__('Ви ввели невірний пароль'));
			}
		} elseif (isset($_GET['action']) && $_GET['action'] == 'logout') {
			Users::getInstance()->logOut();
		}
	}
}